package com.dhj.jvmstudy.chapter01;

/**
 * 虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁
 */
public class DeadThreadTest {

    public static void main(String[] args) {
        Runnable r = () -> {
            System.out.println(Thread.currentThread().getName()+"开始");
            DeadThread dead = new DeadThread();
            System.out.println(Thread.currentThread().getName()+"结束");
        };

        Thread t1 = new Thread(r, "Thread-1");
        Thread t2 = new Thread(r, "Thread-2");

        t1.start();
        t2.start();
    }

}

class DeadThread {
    static {
        if (true){
            // 此代码只能被执行一次，应为类只能被初始化加载一次
            System.out.println(Thread.currentThread().getName()+"初始化当前类");

            // 如果我们在类的初始化时，加入阻塞代码。那么所有相关的上级线程都会阻塞。
            // 因此在代码开发过程中，要极力避免此情况。
            while (true){

            }
        }
    }
}
